/**
 * LifeService框架类型定义
 */

// 服务配置接口
export const ServiceOptions = {
  // 服务是否为单例
  singleton: true,
  // 服务启动顺序
  priority: 0,
  // 依赖的其他服务
  dependencies: [],
  // 自定义配置
  config: {}
};

// 服务接口定义
export class Service {
  /**
   * 服务构造函数
   * @param {LifeserviceCore} container - 服务容器实例
   */
  constructor(container) {
    this.container = container;
  }

  /**
   * 服务启动方法
   * @param {ServiceOptions} options - 服务配置选项
   */
  boot(options) {
    // 子类实现
  }

  /**
   * 服务关闭方法
   */
  shutdown() {
    // 子类实现
  }

  /**
   * 获取其他服务
   * @param {string} name - 服务名称
   * @returns {*} 服务实例
   */
  get(name) {
    return this.container.get(name);
  }
}

// 框架配置接口
export const LifeserviceConfig = {
  // 是否自动启动
  autoBoot: true,
  // 全局错误处理
  errorHandler: null,
  // 全局配置
  globalConfig: {},
  // 演示服务配置
  demo: {
    // 是否启用演示服务
    enabled: false,
    // 演示延迟时间（毫秒）
    delay: 1000
  },
  
  // 后台管理系统专用配置
  admin: {
    // 登录相关配置
    auth: {
      loginUrl: '/api/login',
      logoutUrl: '/api/logout',
      tokenKey: 'admin_token',
      refreshTokenKey: 'refresh_token',
      tokenExpireKey: 'token_expire',
      userInfoKey: 'user_info',
      redirectAfterLogin: '/dashboard',
      redirectAfterLogout: '/login'
    },
    
    // 路由配置
    router: {
      baseUrl: '/',
      notFoundPath: '/404',
      forbiddenPath: '/403',
      loginPath: '/login',
      useHashMode: false,
      menuKeyField: 'path',
      menuChildrenField: 'children'
    },
    
    // 主题配置
    theme: {
      defaultTheme: 'light',
      darkTheme: 'dark',
      themeStorageKey: 'admin_theme',
      supportThemes: ['light', 'dark']
    },
    
    // 布局配置
    layout: {
      collapsedSidebar: false,
      sidebarWidth: 240,
      sidebarCollapsedWidth: 64,
      fixedHeader: true,
      showBreadcrumb: true,
      showFooter: true
    },
    
    // API配置
    api: {
      baseUrl: '/api',
      timeout: 30000,
      retryCount: 0,
      showLoading: true,
      loadingDelay: 300
    },
    
    // 表格配置
    table: {
      defaultPageSize: 10,
      pageSizes: [10, 20, 50, 100],
      showSizeChanger: true,
      showQuickJumper: true,
      showTotal: true
    },
    
    // 缓存配置
    cache: {
      storageType: 'localStorage',
      cacheTime: 7 * 24 * 60 * 60 * 1000 // 7天
    },
    
    // 国际化配置
    i18n: {
      // 默认语言
      defaultLocale: 'zh-CN',
      // 回退语言
      fallbackLocale: 'en-US',
      // 语言存储键名
      storageKey: 'admin_locale',
      // 是否支持RTL(从右到左)语言
      supportRTL: false,
      // 语言包加载方式: 'sync'(同步) | 'async'(异步)
      loadMode: 'sync',
      // API加载语言包的URL模式，{locale}会被替换为语言代码
      apiUrlPattern: '/api/lang/{locale}'
    },
    
    // 通知配置
    notification: {
      maxVisible: 5,
      duration: 4500,
      position: 'top-right',
      closeable: true,
      showProgress: true,
      animation: true,
      sound: false,
      vibration: false
    },
    
    // 错误处理配置
    error: {
      enableGlobalHandler: true,
      enableReporting: false,
      reportUrl: '',
      maxErrors: 100,
      showNotification: true,
      logErrors: true
    },
    
    // 日志配置
    logger: {
      level: 'info',
      formatter: 'console',
      enableConsole: true,
      storages: [],
      storageOptions: {
        memory: {
          maxSize: 1000
        },
        local: {
          key: 'admin_logs',
          maxSize: 1000
        },
        remote: {
          url: '',
          bufferSize: 100,
          flushInterval: 5000
        }
      },
      includeTimestamp: true,
      includeContext: true
    },
    
    // 演示服务配置
    demo: {
      // 是否启用演示服务
      enabled: false,
      // 演示延迟时间（毫秒）
      delay: 1000
    }
  }
};

// 导出常用类型别名
export const ServiceFactory = Function;
export const ServiceInstance = Object;
export const ServiceName = String;